package com.example.demo.util;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.FileImageOutputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

public class ImageWaterUtils {
    public static void main(String[] args) {
        // 要生成图片的竖排文字
        String text = "竖排文字示例";
        // 字体设置
        Font font = new Font("宋体", Font.BOLD, 30);
        // 文字颜色
        Color textColor = Color.RED;
        // 文字区域背景颜色（半透明）
        Color bgColor = new Color(255, 255, 255, 128);
        try {
            // 创建一个 BufferedImage 对象，设置图片类型为透明背景
            BufferedImage image = createVerticalTextImage(text, font, textColor, bgColor);
            // 保存生成的图片
            File output = new File("D:\\vertical_text_image.png");
            ImageIO.write(image, "png", output);
            System.out.println("图片生成完成，已保存为 vertical_text_image.png");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static BufferedImage createVerticalTextImage(String text, Font font, Color textColor, Color bgColor) {
        // 获取字体的字体度量，用于计算文字的宽度和高度
        FontMetrics fm = new FontMetrics(font) {};
        // 计算每个字符的宽度和高度
        int charWidth = fm.charWidth('中');
        int charHeight = fm.getHeight();
        // 计算竖排文字所需的图片宽度和高度
        int width = charHeight + 20; // 加上一些边距
        int height = charWidth * text.length() + 20; // 加上一些边距
        // 创建一个透明背景的 BufferedImage 对象
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = image.createGraphics();
        // 开启抗锯齿，使文字更平滑
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        // 绘制文字区域的半透明背景
        g2d.setColor(bgColor);
        g2d.fillRect(10, 10, width - 20, height - 20);
        // 设置文字颜色和字体
        g2d.setColor(textColor);
        g2d.setFont(font);
        // 逐字绘制竖排文字
        int x = 20;
        int y = 20;
        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            g2d.drawString(String.valueOf(c), x, y);
            y += charWidth;
        }
        // 释放 Graphics2D 对象的资源
        g2d.dispose();
        return image;
    }
}
